'use strict';

const yjxActUtil = require('../yjx/v1/util/activityUtil');
const yjxApi4backUtil = require('../yjx/v1/api4back/util/api4backUtil');
const activityServiceUtil = require('./serviceUtil/activityServiceUtil');

const activityService = {};

/**
 * 获取活动列表
 *
 * @author 王俊
 * @date 2018-07-18
 *
 * @warning 此功能应由用户中心服务提供, 现考虑迁移成本, 先依赖原一键秀userUtil 实现的方法 (add by wangjun 2017-07-18)
 *
 * @param {{Object}} option 筛选活动的参数列表
 * @param {Number} [option.type] 活动分类, 10:推广有奖活动, 20:图片点赞活动, 默认为10
 * @param {Array} option.states    活动状态数组10未开场、20已开场、30活动截止、40活动关闭、50活动取消
 * @param {{Number}} option.pageNum   页码
 * @param {Number} option.pageSize  页容量
 * @param {Number} [option.userId]  用户id
 * @param {Number} [option.filterUser] 是否根据用户过滤活动列表, 0 不过滤, 1 过滤, 如使用该字段必须传递 userId
 * @param {Number} [option.checkReward] 是否检测用户在活动中的获奖状况,0 不过滤, 1 过滤,  如使用该字段必须传递 userId
 * @param {Number} option.withTotalPage 是否需要返回总页数  0不需要  1需要
 * @param {Number} [option.orgId] 组织id该接口不适用该参数
 * @param {Number} option.publish 用来标记当前接口需要使用publish字段
 * @param {Function} callback 回调函数
 */
activityService.getActivityList = function (option, callback) {
    option.type = option.type || 10;  // 活动分类, 10:推广有奖活动, 20:图片点赞活动, 默认为10

    if(option.type === 10) {
        option.flag = option.publish;
        return yjxActUtil.getActivityList_v1_7(option, callback);
    }
    if(option.type === 20) {
        return activityServiceUtil.getImagePraiseActivityList(option, callback);
    }
    return callback('暂不支持的活动类型', null);
};

/**
 * 提交作品至活动
 *
 * @author 王俊
 * @date 2018-07-18
 *
 * @param {{Object}} option
 * @param {Number} option.device         设备标识
 * @param {Number} [option.type]         活动分类, 10:推广有奖活动, 20:图片点赞活动, 默认为10
 * @param {Number} option.userId         用户唯一标识
 * @param {Number} option.activityId     活动 id
 * @param {String} option.url            参赛链接
 * @param {String} [option.desc]         作品描述
 * @param {String} [option.couponCode]   推荐码
 * @param {Function} callback
 *                      error
 */
activityService.submitProductToAct = function (option, callback) {

    option.type = option.type || 10;
    if (option.type === 10) {
        return yjxActUtil.submitProduct_v1_7(option.device,option.activityId,  option.userId, option.desc, option.url, option.couponCode, callback);
    }
    if (option.type === 20) {
       return activityServiceUtil.submitImagePraiseProduct(option, callback);
    }

};



/**
 * 201-获取活动详情
 *
 * @author 毛凯
 * @date 2018-07-19
 *
 * @param {{Object}} option 请求参数
 * @param {Number} option.device               设备标识
 * @param {Number} [option.type]               活动分类, 10:推广有奖活动, 20:图片点赞活动, 默认为10
 * @param {Number} option.activityId            活动唯一标识
 *
 * @param {Number} [option.topLimit]            限制获取前 topLimit 位作品, 默认为3, type 为 10 时使用
 * @param {String} [option.withPromote]         是否请求获取推广信息, 0 不获取, 1 获取, 默认为0, type 为 10 时使用
 *
 * @param {Number} [option.remaining]          是否获取剩余奖励 type 为 20 时使用
 * @param {Number} [option.participants]       是否获取参与人数 type 为 20 时使用
 * @param {Number} [option.rule]               是否获取奖励规则(min-max) type 为 20 时使用
 *
 * @param {Function} callback 回调函数
 *                      error: 失败原因
 */
activityService.getActivityDetail = function (option, callback) {
    option.type = option.type || 10;
    // 挑战活动
    if(option.type === 10) {
        activityServiceUtil.getActivityDetail(option, callback);
    }
    // 图片点赞活动
    if(option.type === 20) {
        activityServiceUtil.getImagePraiseActivityDetail(option, callback);
    }

};


/**
 * 201-获取活动的推广信息
 *
 * @author 毛凯
 * @date 2018-07-19
 *
 * @param {{Object}} option 请求参数
 * @param {Number} option.device               设备标识
 * @param {Number} option.actId            活动唯一标识
 * @param {Function} callback 回调函数
 *                      error: 失败原因
 */
activityService.getActivityPromoteInfo = function (option, callback) {
    activityServiceUtil.getActivityPromoteInfo(option.actId, callback);
};


/**
 * 201-获取活动作品列表(该接口只提供冲顶大赛活动的作品)
 *
 * @author 毛凯
 * @date 2018-07-20
 *
 * @param {{Object}} option 请求参数
 * @param {Number} option.device               设备标识
 * @param {Array} option.actId            活动唯一标识数组的 json 字符串, 不传默认全部活动
 * @param {Number} option.pageNum            页码
 * @param {Number} option.pageSize            页容量
 * @param {Number} option.withTotalPage      是否获取总页数, 0 不获取, 1 获取, 默认为 0
 * @param {Array} option.states            作品状态数组的 json 字符串, 10新建, 20评审中, 30通过, 40不通过
 * @param {Number} option.userId            用户唯一标识, 若传递则标记筛选该用户的作品
 * @param {Number} option.orderBy            0 按作品当前排名排序, 1 按作品的创建时间排序, 默认为 0
 * @param {Function} callback 回调函数
 *                      error: 失败原因
 */
activityService.getActivityProductList = function (option, callback) {
    activityServiceUtil.getActivityProductList(option, callback);
};



/**
 * 201-获取被推荐用户列表
 *
 * @author 毛凯
 * @date 2018-07-20
 *
 * @param {{Object}} option 请求参数
 * @param {Number} option.device               设备标识
 * @param {Number} option.userId               用户id
 * @param {Number} option.pageNum            页码
 * @param {Number} option.pageSize            页容量
 * @param {Number} option.withTotalPage      是否获取总页数, 0 不获取, 1 获取, 默认为 0
 * @param {Function} callback 回调函数
 *                      error: 失败原因
 */
activityService.getPromtedUserList = function (option, callback) {
    activityServiceUtil.getPromtedUserList(option, callback);
};



/**
 * 201-获取活动推荐方排行榜
 *
 * @author 毛凯
 * @date 2018-07-20
 *
 * @param {{Object}} option 请求参数
 * @param {Number} option.device               设备标识
 * @param {Number} option.userId               用户id
 * @param {Number} option.actId               活动 id
 * @param {Number} option.order               暂定如下 1 金额排名
 * @param {Number} option.privacy              是否使用隐私模式 0 不使用, 返回用户信息时不对昵称扥进行隐藏处理 1 使用, 返回用户信息时对昵称等进行隐藏处理
 * @param {Number} option.pageNum            页码
 * @param {Number} option.pageSize            页容量
 * @param {Number} option.withTotalPage      是否获取总页数, 0 不获取, 1 获取, 默认为 0
 * @param {Function} callback 回调函数
 *                      error: 失败原因
 */
activityService.getActPromoterRankingList = function (option, callback) {
    activityServiceUtil.getActPromoterRankingList(option, callback);
};

/**
 * 202-初始化活动配置信息
 *
 * @author 毛凯
 * @date 2018-07-20
 *
 * @param actId 活动id
 * @param {Function} callback 回调函数
 *                      error: 失败原因
 */
activityService.initActivityInfo = function(actId,callback){
     activityServiceUtil.initActivityInfo(actId,callback);
};

/**
 * 获取某图片点赞活动参与者列表
 *
 * @author 王俊
 * @date 2018-07-31
 *
 * @param {{Object}} option
 * @param {Array} option.actIds             活动 id 数组
 * @param {Number} option.rewardLimit       奖励金额限制, 大于等于最低限制才算入列表, 单位: 分
 * @param {Number} option.pageNum           页码
 * @param {Number} option.pageSize          页容量
 * @param {Number} [option.withTotalPage]   是否获取总页数
 * @param {Number} [option.orderBy]         排序方式, 1 时间倒序, 默认为 1
 * @param {Function} callback
 *                      error
 *                      data: {
 *                          list:[],
 *                          currentPage: 0,
 *                          totalPage: 1
 *                      }
 */
activityService.getImagePraiseActivityParticipantList = function(option, callback) {
    activityServiceUtil.getImagePraiseActivityParticipantList(option, callback);
};

/**
 * 获取某作品点赞用户列表
 *
 * @author 王俊
 * @date 2018-07-31
 *
 * @param {{Object}} option
 * @param {Array} option.productId          作品 id
 * @param {Number} option.pageNum           页码
 * @param {Number} option.pageSize          页容量
 * @param {Number} option.rewardType        10挑战活动奖励，20发放推广码奖励, 21填写推广码奖励, 30首次浏览活动分享页随机红包, 31点赞方奖励, 32被点赞方奖励',
 * @param {Number} [option.withTotalPage]   是否获取总页数
 * @param {Number} [option.orderBy]         排序方式, 1 时间倒序, 2 点赞金额
 * @param {Function} callback
 *                      error
 *                      data: {
 *                          list:[],
 *                          currentPage: 0,
 *                          totalPage: 1
 *                      }
 */
activityService.getImagePraiseActivityProductLikeUserList = function(option, callback) {
    activityServiceUtil.getImagePraiseActivityProductLikeUserList(option, callback);
};


/**
 * 获取图片点赞活动的作品信息
 *
 * @author 王俊
 * @date 2018-07-31
 *
 * 注意: 参数可为  option.actId 和 option.userId 或 option.productId, 或 全部传递, 注意: 对应关系
 *
 * @param {{Object}} option
 * @param {Number} [option.actId]         活动 id
 * @param {Number} [option.userId]        用户 id
 * @param {Number} [option.productId]     作品 id
 * @param {Function} callback
 *                      error
 *                      info: 作品行数据 + 作者相关
 */
activityService.getImagePraiseActivityProductInfo = function(option, callback) {
    activityServiceUtil.getImagePraiseActivityProductInfo(option, callback);
};


/**
 * 202-给作品点赞
 *
 * @author 毛凯
 * @date 2018-07-20
 * @param {{Object}} option 请求参数
 * @param {Number} option.device               设备标识
 * @param {Number} option.userId               用户id
 * @param {Number} option.productId            作品 id
 * @param {Number} option.actId                活动 id
 * @param {Function} callback 回调函数
 *                      error: 失败原因
 */
activityService.giveALikeToProduct = function(option,callback){
    activityServiceUtil.giveALikeToProduct(option,callback);
};

/**
 * 检测用户是否为某作品点赞
 *
 * @author 王俊
 * @date 2018-07-31
 *
 * @param {{Object}} options
 * @param {Number} options.userId
 * @param {Number} options.productId
 * @param {Function} callback
 */
activityService.checkUserWhetherLikeProduct = function(options, callback) {
    activityServiceUtil.checkUserWhetherLikeProduct(options, callback);
};


/**
 * 202-获取活动随机奖励
 *
 * @author 毛凯
 * @date 2018-07-20
 * @param {{Object}} option 请求参数
 * @param {Number} option.device               设备标识
 * @param {Number} option.userId               用户id
 * @param {Number} option.actId                活动 id
 * @param {Function} callback 回调函数
 *                      error: 失败原因
 */
activityService.getActivityRandomReward = function(option,callback){
    activityServiceUtil.getActivityRandomReward(option,callback);
};

/**
 * 刷新活动状态
 *
 * @author 王俊
 * @date 2018-08-02
 *
 * @param {Object} option
 * @param {Number} option.type 活动类型
 * @param {Function} callback
 *                      error
 */
activityService.refreshActivityState = function(option, callback) {
    activityServiceUtil.refreshActivityState(option, callback);
};

module.exports = activityService;
